#!/usr/bin/env python
# cython: profile=True

#from pylab import *
import numpy as np
cimport numpy as np

cimport cython


#############################################################################
cdef Graytodec(g):

    
#Convierte un numero en codigo Gray a decimal. La entrada debe ser una lista de 8 elementos 
    
    b=[g[0]]

    for i in range(1,8):
    
        if g[i]==0:
            b.append(b[i-1])
        if g[i]==1:
            if b[i-1]==0:
                b.append(1)
            if b[i-1]==1:
                b.append(0)


    n8=b[0]*(2**7)
    n7=b[1]*(2**6)
    n6=b[2]*(2**5)
    n5=b[3]*(2**4)
    n4=b[4]*(2**3)
    n3=b[5]*(2**2)
    n2=b[6]*(2**1)
    n1=b[7]*(2**0)

    num=n1+n2+n3+n4+n5+n6+n7+n8
    
    
    return num
######################################################################


cdef GetListInt(dic0):

	cdef int k=0

	for key in dic0.keys():
		if k%100000==0:print k
		aux = Graytodec(dic0[key])
		dic0[key]=aux
		k+=1
	return dic0
	
######################################################################
 

cdef GetMatInt(t1,t2,dic1):

	cdef np.ndarray[np.int_t, ndim=2,  mode="c"] mat0=np.zeros((t2, t1), dtype=np.int_t)
	
	cdef int a,g,u=0
	
	for a in range(t2):
		for g in range(t1):
			mat0[a][g]=dic1[(a,g)]
			u=u+1
			print u

	return mat0
